1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include<bits/stdc++.h> using namespace std; #define mem(x,y) memset(x,y,sizeof(x)) #define debug puts("-------") #define NV 300005 #define NE 600005 struct edge{int v,next;}e[NE]; int pre[NV],vis[NV]; int ecnt; void init() { mem(pre,-1); ecnt=0; } void adde(int u,int v) { e[ecnt].v=v; e[ecnt].next=pre[u]; pre[u]=ecnt++; } int fl; int ans[NE]; void print(int dep) { printf("%d\n",dep); for(int i=1;i<=dep;i++) printf("%d%c",ans[i]," \n"[i==dep]); fl=1; } int k,now; void dfs(int u,int dep) { if(fl)return; ans[dep]=u; vis[u]=1; for(int i=pre[u];~i;i=e[i].next) { int v=e[i].v; if(!vis[v]&&v>now)dfs(v,dep+1); if(v==now&&dep>k)print(dep); if(fl)return ; } } int main() { int n,m; scanf("%d%d%d",&n,&m,&k); init(); while(m--) { int u,v; scanf("%d%d",&u,&v); adde(u,v); adde(v,u); } fl=0; for(int i=1;i<=n;i++) { mem(vis,0); now=i; dfs(i,1); if(fl)break; } }
|